iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 13
0

前言

在介紹完 Publisher 以及 Subscriber 後,我們即將介紹 ROS 架構中的 Service 與 Parameter。簡單來說,Nodes 之間除了透過 Topics 溝通之外,也能利用服務 (Services) 傳輸所需的 data。而 Parameters 指的是系統參數,我們能輕易的透過此參數來針對 ROS 專案中的某個部分進行修改。那麼接下來就開始進入正題吧!

ROS Services

與 Topics 不同的地方在於, Services 是一種同時包含了 RequestResponse 的訊息機制。何謂 Request-Response? 在 Topic 裡頭有 Publisher 以及 Subscriber,兩者是由 Publisher 向 Topic 發布訊息,Subscriber 才會接收到訊息。但在 Service 裡只有 Server 與 Client,Client 必須透過 Service 向 Server 提出 Request,而 Server 才會回傳對應的 Response 給 Client。我們可以用簡單的圖例來解釋 Request-Response:
https://ithelp.ithome.com.tw/upload/images/20200927/20129807FQ5osvLzSV.png

我們可以在 turtlesim_node 當中試著使用 Services,首先開啟好小烏龜,並且在另一 Terminal 當中輸入 rosservice list
https://ithelp.ithome.com.tw/upload/images/20200927/20129807lONi4ho4ew.png

可以看到出現了許多 Services,其中開頭為 /rosout 的兩個 Services 就是之前所說 ROS 底下的 log所產生,至於其他的 /clear, /kill, /reset 等等就是我們小烏龜帶有的 Services。我們可以透過 rosservice call [service] 來執行這些 Services:
https://ithelp.ithome.com.tw/upload/images/20200927/20129807NWU3vtllxp.png
https://ithelp.ithome.com.tw/upload/images/20200927/20129807EnEVMlM5tI.png

注意小烏龜的視窗當中,不論是軌跡或者烏龜的圖形都被刷新了!接著我們可以透過 rosservice type [service] | rossrv show 來清楚的到 Service 的 Request-Response 格式:
https://ithelp.ithome.com.tw/upload/images/20200927/20129807aZiv5KhTNR.png

Request-Response 以"---"符號區分各自的格式,以上為 Request 以下為 Response。可以看到 /reset 這項 Service 不需要提供 Request,Response 亦不回傳任何訊息!讓我們再看看其他的 Services:
https://ithelp.ithome.com.tw/upload/images/20200928/20129807C9rakC4pVp.png

/spawn 這項 Service 需要提供的 Request 有四個,其實這項 Service 就是你提供 x、 y、 theta、 name 後,就會幫你在視窗當中的 (x,y) 位置,生成一隻角度為 theta,名稱為 name 的小烏龜,讓我們實際試試看:
https://ithelp.ithome.com.tw/upload/images/20200928/20129807znd2txD2cS.png

Services 大致上就介紹到這邊,重點就在於 Request-Response 的訊息格式是與 Topics 的 Message 是不同的!

ROS Parameters

Parameter 被存放於 ROS Master下的 Parameter Server,可以供整個 ROS 專案當中所有的 Nodes 作存取。由於一個機器人所攜帶的參數會相當多,為了避免每次修改參數時都需要重新編譯程式,因此利用 Parameter Server 來管理這些系統參數,能達到方便管理與修改的目的。

我們可以透過 rosparam list 來查看目前有哪些系統參數,不過 Parameter Server 是存在於 ROS Master 下,因此我們必須在開啟 ROS Master 的狀況下才能查看有哪些 Parameter:
https://ithelp.ithome.com.tw/upload/images/20200928/20129807uRiKiE52LU.png

知道有哪些 Parameter 後,我們可以利用 rosparam get [param_name] 來獲取 Parameter 的參數:
https://ithelp.ithome.com.tw/upload/images/20200928/20129807RgpeoBeKmB.png

此外,我們也能透過 rosparam set [param_name] <value> 來設定我們想要給定的參數值:
https://ithelp.ithome.com.tw/upload/images/20200928/20129807RfX0zgU7CN.png

設定完成後,我們來使用剛剛提到的 Service 指令 rosservice call /clear,看看小烏龜視窗的變化:
https://ithelp.ithome.com.tw/upload/images/20200928/20129807nQmC34os4J.png

以上就是 Parameter 的介紹,雖然我們只用了基本的小烏龜來進行解說,但愈龐大的 ROS 專案其 Parameter 的重要性也愈大,如何有效的設定並運用 Parameter 對於 ROS 架構而言是相當重要的。

結語

簡單總結一下今天的內容,今天介紹了 ROS Services 與 Parameters,Services 類似於 Message 的概念,但並非透過 Topic 來傳遞訊息,而是藉由 Request-Response 機制來完成;Parameters 則是能夠讓你快速調整 ROS 專案當中的某些數據,省去到內部程式修改、編譯的時間。雖然只有簡單介紹兩者的概念,但瞭解這些功能也是相當重要的。明天我們則會開始介紹 Xml 格式,為之後的 launch 檔做鋪陳,那麼就請各位敬請期待!
https://ithelp.ithome.com.tw/upload/images/20200928/201298070ccBAbBOYz.png


上一篇
[DAY 12] Publisher && subscriber 的應用 2
下一篇
[DAY 14] Xml 語法概述
系列文
ROS系統控制自走車搭配點雲雷達(隧道檢測裝置)30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言